給一個連結陣列,移除連結陣列從後面數來第n個節點
問題描述:
n
個節點處刪除該節點,最後返回新的鏈表的頭節點。思路分析:
s - n
個節點(其中 s
是鏈表的總長度),這樣才能從倒數第 n
個節點的位置進行刪除。s
,然後再通過第二次遍歷找到第 s - n
個節點,並刪除它。步驟分解:
s
。s - n
個節點並刪除其後的節點。邊界處理:
head
直接指向下一個節點。class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
// 創建一個臨時指標指向頭節點,並初始化鏈表長度為 0
ListNode* temp = head;
int length = 0;
// 遍歷整個鏈表,計算鏈表長度
while (temp != nullptr) {
length++;
temp = temp->next;
}
// 計算要刪除的節點是從頭數的第幾個節點
int position = length - n;
temp = head;
// 如果要刪除的是頭節點,直接返回頭節點的下一個節點
if (position == 0) return head->next;
// 找到從頭數第 position-1 個節點
for (int i = 0; i < position - 1; ++i) {
temp = temp->next;
}
// 刪除目標節點
if (temp->next != nullptr) {
temp->next = temp->next->next;
}
return head;
}
};